package io;

import java.io.*;

/**对象流
* java.io.ObjectInputStream和ObjectOutPutStream
*
* 对象流的功能:进行对象序列化和反序列化
* 对象序列化由对象输出流完成:将一个java对象按照其结构转换为一组字节的过程
* 对象反序列化由对象输入流完成:将一组字节还原为一个java对象的过程
 *
 * */
public class OOSDemo {
    public static void main(String[] args) throws IOException {
        //将一个Person对象写入文件person.obj中
        String name = "苍老师";
        int age = 33;
        String gender = "男";
        String[] otherInfo = {"技术好","拍片一流","大家的启蒙老师"};
        double salary = 4500.0;
        Person person = new Person(name,age,gender,otherInfo,salary);
        //文件输出流(低级流):将字节写入指定文件中
        FileOutputStream fos = new FileOutputStream("src/io/person.obj");
        //对象输出流(高级流):将一个java对象进行序列化
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        /*运行报错
        java.io.NotSerializableException:序列化时抛出异常
        说明序列化的类没有实现可序列化接口:java.io.Serializable
        这里将对象写出涉及到两个操作:
        对象序列化:对象经过对象输出流时,会被文件输出流转化为一组字节的过程
                 对象在序列化时,还会将类的结构一起序列化进行存储
        数据持久化:序列化后的字节再经过文件流被写入文件中(硬盘中)的过程
        持久化:可以长久保存
        会记录数据长度*/
        oos.writeObject(person);
        System.out.println("写出完毕!");
        oos.close();
    }
}
